package leecode.array;

import java.util.Arrays;

/**
 * @author wangxi created on 2021/1/9 20:17
 * @version v1.0
 * <p>
 * https://leetcode-cn.com/problems/ba-shu-zu-pai-cheng-zui-xiao-de-shu-lcof/
 *
 * 把数组排成最小的数
 */
public class MinNumberWithArray {

    /**
     * 这个题还不能简单的比较相邻两个数字数值大小，会存在bug，比如：
     *   case :  10 1
     *   错误输出 ： 101
     *   正确输出：110
     */

    public String minNumber(int[] nums) {
        if (nums == null || nums.length <= 0) {
            return "";
        }
        String[] strs = new String[nums.length];
        for (int i = 0; i < nums.length; i++) {
            strs[i] = String.valueOf(nums[i]);
        }
        Arrays.sort(strs, (x, y) -> (x + y).compareTo(y + x));

        // 如果是最大值nowcoder上的一个特殊case : nums = {0, 0}，预期输出 "0"
        // 本题求最小值 无这个限制
//        if (strs[0].equalsIgnoreCase("0")) {
//            return "0";
//        }
        StringBuilder buffer = new StringBuilder();
        for (int i = 0; i < strs.length; i++) {
            buffer.append(strs[i]);
        }
        return buffer.toString();
    }

    public static void main(String[] args) {
        MinNumberWithArray obj = new MinNumberWithArray();
        int[] nums = {0, 0};
        System.out.println(obj.minNumber(nums));
    }
}
